﻿/*
SINACOR - BMF&Bovespa
Arquivo: ClienteDesbloqueadoNoCadastro.cs
Criado em: 08-jun-2010 17:14:32
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common.Validation;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Validation.BusinessRules;


namespace Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessLogic.BusinessRulesValidation 
{
	public class ClienteDesbloqueadoNoCadastro : BaseBusinessRuleValidation<BusinessEntity.Bloqueio>, IBusinessRuleValidation 
	{
		#region Atributos
        private int _erroClienteBloqueadoCadastro = 109747;
		#endregion

		#region Propriedades
		public int ErroClienteBloqueadoCadastro
		{
			get { return _erroClienteBloqueadoCadastro; }
			set { _erroClienteBloqueadoCadastro = value; }
		}
		#endregion

		#region Métodos
		public List<ValidationError> GetErrors()
		{
            return this.ErrorsList;
		}

		/// <summary>
		/// Trata exceções
		/// </summary>
		/// <param name="entity"></param>
		private void TratarExcecoes(BusinessEntity.Resultado entity)
		{
            if (string.IsNullOrEmpty(entity.Argumentos))
                throw new BusinessException(entity.CodigoErro);
            else
            {
                List<Object> _params = ErrorMessage.ConvertXmlArgumentsToParameters(entity.Argumentos);

                if (_params != null)
                    throw new BusinessException(entity.CodigoErro, _params.ToArray());
                else
                    throw new BusinessException(entity.CodigoErro);
            }
		}

		public void Validate()
		{
            CodigoClienteInformado validacaoCodigoClienteInformado = null;
            BusinessRulesValidator validador = null;
            ResourceAccess.Bloqueio raBloqueio = null;
            BusinessEntity.Resultado resultado = null;

            //Validar CodigoClienteInformado
            validacaoCodigoClienteInformado = new CodigoClienteInformado();
            validacaoCodigoClienteInformado.EntityToValidate = this.EntityToValidate;

            validador = new BusinessRulesValidator();
            validador.AddValidation("CodigoClienteInformado", validacaoCodigoClienteInformado);
            validador.Validate();


            if (this.EntityToValidate != null &&
                this.EntityToValidate.Cliente != null &&
                this.EntityToValidate.Cliente.Codigo.HasValue)
            {
                raBloqueio = new ResourceAccess.Bloqueio();

                resultado = raBloqueio.VerificarClienteCadastroBloqueado(this.EntityToValidate.Cliente.Codigo.Value);

                //Validacao de Cliente Desbloqueado No Cadastro
                if (resultado.Sucesso == false)
                {
                    if (resultado.CodigoErro == -1)
                    {
                        throw new BusinessException(this.ErroClienteBloqueadoCadastro);
                    }
                    else
                    {
                        this.TratarExcecoes(resultado);
                    }
                }
            }

		}
		#endregion
	}

}